public class Solution1 {
    public int deleteAndEarn(int[] nums) {
        // 1. 预处理
        int n = nums.length;
        int[] arr = new int[Integer.MAX_VALUE];
        for(int i = 0; i < n; i++) {
            arr[nums[i]]++;
        }

        // 2. 打家劫舍
        int[] f = new int[n];
        int[] g = new int[n];
        f[0] = arr[0] * 0;
        g[0] = 0;
        for(int i = 1; i < n; i++) {
            f[i] = g[i - 1] + arr[i] * i;
            g[i] = Math.max(f[i - 1], g[i - 1]);
        }
        return Math.max(g[n - 1], f[n - 1]);
    }
}
